package com.woniuxy.admin.controller;


import com.woniuxy.admin.exception.FileException;
import com.woniuxy.admin.dto.AdminAccountPageDto;
import com.woniuxy.admin.ossform.UpdateAdminHeaderForm;
import com.woniuxy.admin.service.AdminInfoService;
import com.woniuxy.admin.util.FileUtil;
import com.woniuxy.admin.util.TokenUtil;
import com.woniuxy.core.util.Result;
import com.woniuxy.oss.util.OSSUtil;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author ...
 * @since 2024年05月22日
 */
@RestController
@RequestMapping("/adminInfo")
@Api(tags="管理员基本信息")
public class AdminInfoController {
    @Resource
      private AdminInfoService adminInfoService;
    @Resource
     private OSSUtil ossUtil;

    @Resource
    private TokenUtil tokenUtil;

    /**
     * 修改管理员信息
     * @param nickName 昵称
     * @param token
     * @return
     */
    @GetMapping("/updateAdminInfo")
    @ApiOperation("修改管理员信息")
    public Result updateAdminInfo(String nickName, @RequestHeader String token){
        Integer accountId = tokenUtil.getAccountId(token);
        adminInfoService.updateAdminInfo(accountId,nickName);
        return Result.success("修改管理员信息成功",null);
    }

    /**
     * 修改头像
     * @param form  头像图片
     * @return
     * @throws IOException
     */
    @PostMapping("/updateAdminHeader")
    @ApiOperation("修改头像")
    public Result updateAdminHeader(UpdateAdminHeaderForm form) throws IOException {
        if(!FileUtil.isImageFile(form.getFile().getInputStream())){
            throw  new FileException(3001,"文件类型错误");
        }
        String oldName = form.getFile().getOriginalFilename();
        String suffix = oldName.substring(oldName.lastIndexOf("."));
        String name= UUID.randomUUID().toString();
        String filePath=ossUtil.uploadFile(form.getFile().getInputStream(),name+suffix,"woniuxy108cr");
        if(filePath==null) throw new FileException(3002,"上传头像失败");
        System.out.println(filePath);
        adminInfoService.updateAdminHeader(form.getAccountId(),filePath);
        return Result.success("更新头像成功",filePath);
    }

    /*
     * 根据管理员Id查询管理员基本信息
     * @return
     */
    @GetMapping("/findAdminInfoByAccountId")
    @ApiOperation("根据Id查询管理员信息")
    @ApiImplicitParam(name = "accountId",value = "管理员账号ID")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = AdminAccountPageDto.class)
    })
    public Result findAdminInfoByAccountId(Integer accountId){
        AdminAccountPageDto dto=adminInfoService.findAdminInfoByAccountId(accountId);
        return Result.success("根据Id查询管理员信息成功",dto);
    }

    /**
     * 根据token查询管理员信息
     * @param token
     * @return
     */
    @GetMapping("/findAdminInfoBytoken")
    @ApiOperation("根据token查询管理员信息")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = AdminAccountPageDto.class)
    })
    public Result findAdminInfoBytoken(@RequestHeader String token){
        Integer accountId = tokenUtil.getAccountId(token);
        AdminAccountPageDto dto=adminInfoService.findAdminInfoByAccountId(accountId);
        return Result.success("根据token查询管理员信息",dto);
    }

    /**
     * 查询未绑定门店店长
     * @return
     */
    @ApiOperation("查询未绑定门店店长")
    @GetMapping("/selectAllShopBoss")
    public Result selectAllShopBoss(){
    List<AdminAccountPageDto> list=adminInfoService.selectAllShopBoss();
        return Result.success("查询未绑定门店店长成功",list);
    }
}

